#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "josephus.h"

/* NAO ALTERAR ESTE ARQUIVO */

int main() {
   /* ----------------------------------------------------------------------
      Declarações e início para verificação do uso da memória dinâmica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */
   
   
   char tipo,sentido;
   int n,m,r;

   fscanf(stdin,"%c",&tipo);
   switch(tipo){
     case 's':
       fscanf(stdin," %d",&n);
       fscanf(stdin,"%d",&m);
       r=josephus_simples(n,m);
     break;
     case 'd':
       fscanf(stdin," %c",&sentido);
       switch(sentido){
         case 'h':
           fscanf(stdin,"%d",&n);
           fscanf(stdin,"%d",&m);
           r=josephus_duplo(sentido,n,m);
         break;
	 case 'a':
           fscanf(stdin,"%d",&n);
           fscanf(stdin,"%d",&m);
	   r=josephus_duplo(sentido,n,m);
	 break;
	 default:
	   fprintf(stdout, "Sentido desconhecido: `%c´\n", sentido);
	 break;
       }
     break;
     default:
       fprintf(stdout, "Opção desconhecida: `%c´\n", tipo);
     break;
   }
   
   fprintf(stdout,"%d\n",r);

   /* --------------------------------------------------------------------- */
   /* Verificação final do uso da memória dinâmica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemória dinâmica não foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}
